با استفاده از داده های زلزله ها در ایران و جهان به سوالات زیر پاسخ دهید.
۱. با استفاده از داده های historical_web_data_26112015.rds و استفاده از نمودار پراکنش سه بعدی بسته plotly نمودار طول، عرض و عمق زلزله ها را رسم نمایید. علاوه بر آن بزرگی هر نقطه را برابر بزرگی زمین لرزه قرار دهید.
sequake = read_rds("week_11/data/historical_web_data_26112015.rds")
plot_ly(x=sequake$Latitude,y=sequake$Longitude,z=sequake$Depth,type="scatter3d",mode='markers',size=sequake$Magnitude, color=sequake$Magnitude)۲. پویانمایی سونامی های تاریخی را بر حسب شدت بر روی نقشه زمین رسم نمایید.(از داده زلزله های بزرگ استفاده نمایید.)
disaster = read_delim("week_11/data/disaster.txt", "\t", escape_double = FALSE, trim_ws = TRUE)
disaster %>% filter(YEAR>2000) %>%
rename(lat = LATITUDE,lon = LONGITUDE, name = COUNTRY,sequence = YEAR) %>%
mutate(z=EQ_PRIMARY/100, color = colorize(FOCAL_DEPTH)) %>%
select(lat, lon, z, color, name, sequence) -> dis
hcmap() %>%
hc_add_series(data = dis, type = "mapbubble", maxSize = "10") %>%
hc_plotOptions(series = list(showInLegend = FALSE))۳. نمودار چگالی دو بعدی زلزله های تاریخی ایران را رسم کنید.( از داده iran_earthquake.rds و لایه stat_density_2d استفاده نمایید).
irequake = read_rds("week_11/data/iran_earthquake.rds")
#irmap = get_map("Iran",zoom = 5, color="bw")
irmap = read_rds("week_11/data/my_map.rds")
ggmap(irmap, extent = "panel", maprange=FALSE) +
geom_density2d(data = irequake, aes(x = Long, y = Lat)) +
stat_density2d(data = irequake, aes(x = Long, y = Lat, fill = ..level.., alpha = ..level..),
size = 0.01, bins = 16, geom = 'polygon') +
scale_fill_gradient(low = "green", high = "red") +
scale_alpha(range = c(0.00, 0.25), guide = FALSE) +
theme(legend.position = "none", axis.title = element_blank(), text = element_text(size = 12))۴. احتمال اینکه در ایران در پنج سال آینده زلزله به بزرگی هفت ریشتر رخ دهد را محاسبه کنید. (از احتمال شرطی استفاده کنید.)
۵. بر اساس داده های زلزله های بزرگ ابتدا تعداد و متوسط کشته زلزله ها را بر حسب کشور استخراج نمایید. سپس نمودار گرمایی تعداد کشته ها را بر روی کره زمین رسم نمایید.(مانند مثال زیر!)
disaster %>% group_by(COUNTRY) %>%
summarise(mean_deaths = round(mean(TOTAL_DEATHS, na.rm = T)), all_deaths = sum(TOTAL_DEATHS, na.rm = T)) -> death_data
death_data$COUNTRY = str_c(str_sub(death_data$COUNTRY, 1,1), str_to_lower(str_sub(death_data$COUNTRY, 2,-1), locale = "en"))
mapdata = get_data_from_map(download_map_data(url = "custom/world.js"))
hcmap(url = "custom/world.js", data = death_data, value = "mean_deaths",
joinBy = c("name", "COUNTRY"), name = "mean death",
dataLabels = list(enabled = TRUE, format = '{point.name}'),
borderColor = "#FAFAFA", borderWidth = 0.1)hcmap(url = "custom/world.js", data = death_data, value = "all_deaths",
joinBy = c("name", "COUNTRY"), name = "total death",
dataLabels = list(enabled = TRUE, format = '{point.name}'),
borderColor = "#FAFAFA", borderWidth = 0.1)۶. با استفاده از داده لرزه های بزرگ و به وسیله طول، عرض، شدت، عمق مدلی برای پیش بینی تعداد کشته های زلزله بیابید.
data = disaster %>% select(LATITUDE, LONGITUDE, FOCAL_DEPTH, EQ_PRIMARY, DEATHS)
data = na.omit(data)
sample_size = floor(0.8*nrow(data))
train_index = sample(seq_len(nrow(data)), sample_size, replace = FALSE, prob = NULL)
train_data = data[train_index,]
test_data = data[-train_index,]
trainMod = lm(DEATHS ~ LATITUDE + LONGITUDE + FOCAL_DEPTH + EQ_PRIMARY, data = train_data)
summary(trainMod)
Call:
lm(formula = DEATHS ~ LATITUDE + LONGITUDE + FOCAL_DEPTH + EQ_PRIMARY,
data = train_data)
Residuals:
Min 1Q Median 3Q Max
-11904 -3244 -1728 78 311835
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -14201.885 3314.196 -4.285 2.01e-05 ***
LATITUDE 58.387 23.178 2.519 0.0119 *
LONGITUDE -2.834 6.115 -0.463 0.6432
FOCAL_DEPTH -19.639 11.321 -1.735 0.0831 .
EQ_PRIMARY 2476.990 496.877 4.985 7.37e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 14640 on 941 degrees of freedom
Multiple R-squared: 0.02878, Adjusted R-squared: 0.02465
F-statistic: 6.971 on 4 and 941 DF, p-value: 1.568e-05
train_data$pred = predict(trainMod, train_data, type = 'response')
head(train_data)# A tibble: 6 x 6
LATITUDE LONGITUDE FOCAL_DEPTH EQ_PRIMARY DEATHS pred
<dbl> <dbl> <int> <dbl> <int> <dbl>
1 1.60 -79.4 33 7.7 600 4541.
2 -16.7 -72.7 87 6.8 1 166.
3 -7.96 110. 13 6.3 5749 370.
4 11.9 -86.0 33 5.4 7 -537.
5 27.4 88.7 10 3.5 2 -4377.
6 40.7 30.3 22 5.7 2 1778.
۷. با استفاده از داده worldwide.csv به چند سوال زیر پاسخ دهید. تحقیق کنید آیا می توان از پیش لرزه، زلزله اصلی را پیش بینی کرد؟
برای این سوال از مدل داده شده در دیتای استفاده شده استفاده کرده ام.
و به صورت مستقل مدلی فیت نکرده ام.wquake = read.csv('week_11/data/worldwide.csv')
print('number of predicted eqrchquakes / all earthquakes')[1] "number of predicted eqrchquakes / all earthquakes"
sum(!is.na(wquake$rms)) / length(wquake$rms)[1] 0.999901
print('mean rms is')[1] "mean rms is"
mean(wquake$rms, na.rm = TRUE)[1] 0.683795
print('min mag is')[1] "min mag is"
min(wquake$mag, na.rm=TRUE)[1] 2.5
print('max mag is')[1] "max mag is"
max(wquake$mag, na.rm=TRUE)[1] 8.2
۸. گزاره " آیا شدت زلزله به عمق آن بستگی دارد" را تحقیق کنید؟ (طبیعتا از آزمون فرض باید استفاده کنید.)
با توجه به پی-ولیوو شدت زلزله با عمق آن اندکی همبستگی دارد.cor(wquake$mag, wquake$depth)[1] 0.1991147
cor.test(wquake$mag, wquake$depth)
Pearson's product-moment correlation
data: wquake$mag and wquake$depth
t = 50.03, df = 60629, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.1914584 0.2067469
sample estimates:
cor
0.1991147
۹. میانگین سالانه زلزله ها را بر حسب کشور به دست آورید. آیا میتوان دلیلی در تایید یا رد تئوری هارپ ارائه کرد.
wquake$place = as.character(wquake$place)
wquake %>% filter(str_detect(place, ', ')) -> new_wquake
x = unlist(lapply(strsplit(new_wquake$place, ', '), '[[', 2 ))
new_wquake %>% mutate(country = x, year=substr(time, 1, 4)) -> new_wquake
new_wquake %>% group_by(country, year) %>% summarise(earthquake_cnt=n()) -> mean_earthquakes
head(mean_earthquakes)# A tibble: 6 x 3
# Groups: country [2]
country year earthquake_cnt
<chr> <chr> <int>
1 Afghanistan 2015 15
2 Afghanistan 2016 193
3 Afghanistan 2017 159
4 Afghanistan 2018 46
5 Alabama 2016 4
6 Alabama 2017 6
۱۰. سه حقیقت جالب در مورد زلزله بیابید.
استانهای زلزله خیز ایران
# Top 6 Provinces in Iran with most earthquakes.
sequake %>% group_by(Province) %>% summarise(count = n()) %>% arrange(desc(count))-> result
head(result)# A tibble: 6 x 2
Province count
<chr> <int>
1 kerman 169
2 Khorasan Razavi 166
3 isfahan 157
4 Semnan 141
5 Yazd 132
6 East Azarbaijan 130
کشورهای زلزله خیز دنیا
# Top 6 countries in the world with most earthquakes.
disaster %>% group_by(COUNTRY) %>% summarise(count = n()) %>% arrange(desc(count))-> result
head(result)# A tibble: 6 x 2
COUNTRY count
<chr> <int>
1 CHINA 585
2 JAPAN 401
3 IRAN 373
4 INDONESIA 368
5 ITALY 325
6 TURKEY 321